From 5897cb493738d562bc2ea2519c7a83beaec25e02 Mon Sep 17 00:00:00 2001 From: "djm@kirby.fc.hp.com" Date: Thu, 15 Sep 2005 10:53:34 -0600 Subject: [PATCH] Properly return extents for hypervisor memory ops call Signed-off-by Kevin Tian --- xen/arch/ia64/xen/hypercall.c | 21 +++++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-) diff --git a/xen/arch/ia64/xen/hypercall.c b/xen/arch/ia64/xen/hypercall.c index a21982a548..79d69db996 100644 --- a/xen/arch/ia64/xen/hypercall.c +++ b/xen/arch/ia64/xen/hypercall.c @@ -14,6 +14,7 @@ #include #include +#include extern unsigned long translate_domain_mpaddr(unsigned long); extern struct ia64_pal_retval xen_pal_emulator(UINT64,UINT64,UINT64,UINT64); @@ -152,9 +153,25 @@ ia64_hypercall (struct pt_regs *regs) break; case __HYPERVISOR_memory_op: - //regs->r8 = do_dom_mem_op(regs->r14, regs->r15, regs->r16, regs->r17, regs->r18); /* we don't handle reservations; just return success */ - regs->r8 = regs->r16; + { + struct xen_memory_reservation reservation; + void *arg = regs->r15; + + switch(regs->r14) { + case XENMEM_increase_reservation: + case XENMEM_decrease_reservation: + if (copy_from_user(&reservation, arg, + sizeof(reservation))) + regs->r8 = -EFAULT; + else + regs->r8 = reservation.nr_extents; + break; + default: + regs->r8 = do_memory_op(regs->r14, regs->r15); + break; + } + } break; case __HYPERVISOR_event_channel_op: -- 2.30.2